#ifndef LADAR_H
#define LADAR_H

#include <iostream>
#include <fstream>
#include <list>
#include "../observer/observer.h"

/*
    多线激光雷达作为主题方，发布主题，并接受订阅
*/
class Ladar : public Subject
{
private:
    std::string model;    // 型号
    int channels;         // 通道数
    double maxRange;      // 测试范围（m）
    double powerConsumed; // 功耗（W）

    // 保存注册的观察者对象
    std::list<Observer *> observers;
    // 目标对象状态.(障碍物状态,1代表前方障碍，2代表左前方障碍，3代表右前方障碍)
    int subjectState;

public:
    Ladar();
    void setModel(const std::string &model);
    void setChannels(int channels);
    void setMaxRange(double maxRange);
    void setPowerConsumed(double powerConsumed);
    // 屏幕输出
    void print();
    // 本地文件保存
    void save(const std::string &filename);

    // 注册Observer
    void Attach(Observer *);
    // 删除Observer
    void Detach(Observer *);
    // 通知所有Observer
    void Notify();
    // 获取状态
    int getSubjectState();
    // 设置状态
    void setSubjectState(int subState);
};
#endif